package com.item.mall;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        //代码自动生成

        AutoGenerator autoGenerator = new AutoGenerator();
        //设置数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        //设置数据库类型
        dataSourceConfig.setDbType(DbType.MYSQL);
        //设置数据库驱动、用户名、密码、url（jdbc四种参数）
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("123456");
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/t_mall?useUnicode=true&characterEncoding=UTF-8");
        //将配置好的数据源装入autoGenerator中
        autoGenerator.setDataSource(dataSourceConfig);
        //做一个全局配置，当前类存放的位置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOpen(true);
        //设置输出路径
        globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");
        //代码注解上的作者
        globalConfig.setAuthor("梅西");
        //设置service的名字
        globalConfig.setServiceName("%sService");
        //将全局配置装入autoGenerator中
        autoGenerator.setGlobalConfig(globalConfig);
        //设置包
        PackageConfig packageConfig = new PackageConfig();
        //设置副包
        packageConfig.setParent("com.item.mall");
        //设置实体类的包
        packageConfig.setEntity("entity");
        //设置mapper的包
        packageConfig.setMapper("mapper");
        //设置控制层controller的包
        packageConfig.setController("controller");
        //设置业务层service的包
        packageConfig.setService("service");
        //设置业务层实现类serviceImpl的包
        packageConfig.setServiceImpl("service.impl");
        //将配置好的包的信息装入autoGenerator中
        autoGenerator.setPackageInfo(packageConfig);
        //设置配置策略
        StrategyConfig strategyConfig = new StrategyConfig();
        //实体类自动配置lombok注解
        strategyConfig.setEntityLombokModel(true);
        //下划线_转驼峰命名
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);

        //配置tablefilllist 实现自动填充创建时间和更行时间
        List<TableFill> list = new ArrayList<>();
        TableFill tableFill1 = new TableFill("create_time", FieldFill.INSERT);
        TableFill tableFill2 = new TableFill("update_time",FieldFill.INSERT_UPDATE);
        list.add(tableFill1);
        list.add(tableFill2);

        strategyConfig.setTableFillList(list);
        //将配置策略装入autoGenerator中
        autoGenerator.setStrategy(strategyConfig);
        autoGenerator.execute();
    }
}
